textview: Fix cursor positioning oddities when scrolling through Pg Up/Down
authorCarlos Garnacho <carlosg@gnome.org>
Tue, 8 Jul 2014 13:27:06 +0000 (15:27 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Wed, 9 Jul 2014 01:14:41 +0000 (21:14 -0400)
Use the adjustment target value when repositioning the cursor, and remove the
checks that ensured the cursor was made onscreen immediately, as there will
be definitely a delay on animated adjustment changes.

gtk/gtktextview.c

index 672d31a9beae5a3dda66d08092511138f0dab1ef..e3c8c7b3880036556bb2883a4b059028ae140ac0 100644 (file)
@@ -6183,16 +6183,14 @@ gtk_text_view_scroll_pages (GtkTextView *text_view,
     {
       gtk_text_view_get_virtual_cursor_pos (text_view, NULL, &cursor_x_pos, &cursor_y_pos);
 
-      oldval = gtk_adjustment_get_value (adjustment);
-      newval = gtk_adjustment_get_value (adjustment);
-
+      oldval = newval = gtk_adjustment_get_target_value (adjustment);
       newval += count * gtk_adjustment_get_page_increment (adjustment);
 
       gtk_adjustment_animate_to_value (adjustment, newval);
-      cursor_y_pos += gtk_adjustment_get_value (adjustment) - oldval;
+      cursor_y_pos += newval - oldval;
 
       gtk_text_layout_get_iter_at_pixel (priv->layout, &new_insert, cursor_x_pos, cursor_y_pos);
-      clamp_iter_onscreen (text_view, &new_insert);
+
       move_cursor (text_view, &new_insert, extend_selection);
 
       gtk_text_view_set_virtual_cursor_pos (text_view, cursor_x_pos, cursor_y_pos);
@@ -6202,7 +6200,6 @@ gtk_text_view_scroll_pages (GtkTextView *text_view,
    * only guarantees 1 pixel onscreen.
    */
   DV(g_print (G_STRLOC": scrolling onscreen\n"));
-  gtk_text_view_scroll_mark_onscreen (text_view, insert_mark);
 
   return !gtk_text_iter_equal (&old_insert, &new_insert);
 }
@@ -6267,16 +6264,13 @@ gtk_text_view_scroll_hpages (GtkTextView *text_view,
     {
       gtk_text_view_get_virtual_cursor_pos (text_view, NULL, &cursor_x_pos, &cursor_y_pos);
 
-      oldval = gtk_adjustment_get_value (adjustment);
-      newval = gtk_adjustment_get_value (adjustment);
-
+      oldval = newval = gtk_adjustment_get_target_value (adjustment);
       newval += count * gtk_adjustment_get_page_increment (adjustment);
 
       gtk_adjustment_animate_to_value (adjustment, newval);
-      cursor_x_pos += gtk_adjustment_get_value (adjustment) - oldval;
+      cursor_x_pos += newval - oldval;
 
       gtk_text_layout_get_iter_at_pixel (priv->layout, &new_insert, cursor_x_pos, cursor_y_pos);
-      clamp_iter_onscreen (text_view, &new_insert);
       move_cursor (text_view, &new_insert, extend_selection);
 
       gtk_text_view_set_virtual_cursor_pos (text_view, cursor_x_pos, cursor_y_pos);
@@ -6292,7 +6286,6 @@ gtk_text_view_scroll_hpages (GtkTextView *text_view,
    * only guarantees 1 pixel onscreen.
    */
   DV(g_print (G_STRLOC": scrolling onscreen\n"));
-  gtk_text_view_scroll_mark_onscreen (text_view, insert_mark);
 
   return !gtk_text_iter_equal (&old_insert, &new_insert);
 }